home *** CD-ROM | disk | FTP | other *** search
Text File | 2002-10-03 | 80.5 KB | 1,981 lines |
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- NNNNAAAAMMMMEEEE
- perldelta - what's new for perl5.004
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- This document describes differences between the 5.003 release (as
- documented in _P_r_o_g_r_a_m_m_i_n_g _P_e_r_l, second edition--the Camel Book) and this
- one.
-
- SSSSuuuuppppppppoooorrrrtttteeeedddd EEEEnnnnvvvviiiirrrroooonnnnmmmmeeeennnnttttssss
- Perl5.004 builds out of the box on Unix, Plan 9, LynxOS, VMS, OS/2, QNX,
- AmigaOS, and Windows NT. Perl runs on Windows 95 as well, but it cannot
- be built there, for lack of a reasonable command interpreter.
-
- CCCCoooorrrreeee CCCChhhhaaaannnnggggeeeessss
- Most importantly, many bugs were fixed, including several security
- problems. See the _C_h_a_n_g_e_s file in the distribution for details.
-
- LLLLiiiisssstttt aaaassssssssiiiiggggnnnnmmmmeeeennnntttt ttttoooo %%%%EEEENNNNVVVV works
-
- %ENV = () and %ENV = @list now work as expected (except on VMS where it
- generates a fatal error).
-
- """"CCCCaaaannnn''''tttt llllooooccccaaaatttteeee FFFFoooooooo....ppppmmmm iiiinnnn @@@@IIIINNNNCCCC" error now lists @INC
-
- CCCCoooommmmppppiiiillllaaaattttiiiioooonnnn ooooppppttttiiiioooonnnn:::: BBBBiiiinnnnaaaarrrryyyy ccccoooommmmppppaaaattttiiiibbbbiiiilllliiiittttyyyy wwwwiiiitttthhhh 5555....000000003333
-
- There is a new Configure question that asks if you want to maintain
- binary compatibility with Perl 5.003. If you choose binary
- compatibility, you do not have to recompile your extensions, but you
- might have symbol conflicts if you embed Perl in another application,
- just as in the 5.003 release. By default, binary compatibility is
- preserved at the expense of symbol table pollution.
-
- $$$$PPPPEEEERRRRLLLL5555OOOOPPPPTTTT environment variable
-
- You may now put Perl options in the $PERL5OPT environment variable.
- Unless Perl is running with taint checks, it will interpret this variable
- as if its contents had appeared on a "#!perl" line at the beginning of
- your script, except that hyphens are optional. PERL5OPT may only be used
- to set the following switches: ----[[[[DDDDIIIIMMMMUUUUddddmmmmwwww]]]].
-
- LLLLiiiimmmmiiiittttaaaattttiiiioooonnnnssss oooonnnn ----MMMM, ----mmmm, and ----TTTT options
-
- The -M and -m options are no longer allowed on the #! line of a script.
- If a script needs a module, it should invoke it with the use pragma.
-
- The ----TTTT option is also forbidden on the #! line of a script, unless it was
- present on the Perl command line. Due to the way #! works, this usually
- means that ----TTTT must be in the first argument. Thus:
-
-
-
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- #!/usr/bin/perl -T -w
-
- will probably work for an executable script invoked as scriptname, while:
-
- #!/usr/bin/perl -w -T
-
- will probably fail under the same conditions. (Non-Unix systems will
- probably not follow this rule.) But perl scriptname is guaranteed to
- fail, since then there is no chance of ----TTTT being found on the command line
- before it is found on the #! line.
-
- MMMMoooorrrreeee pppprrrreeeecccciiiisssseeee wwwwaaaarrrrnnnniiiinnnnggggssss
-
- If you removed the ----wwww option from your Perl 5.003 scripts because it made
- Perl too verbose, we recommend that you try putting it back when you
- upgrade to Perl 5.004. Each new perl version tends to remove some
- undesirable warnings, while adding new warnings that may catch bugs in
- your scripts.
-
- DDDDeeeepppprrrreeeeccccaaaatttteeeedddd:::: IIIInnnnhhhheeeerrrriiiitttteeeedddd AAAAUUUUTTTTOOOOLLLLOOOOAAAADDDD for non-methods
-
- Before Perl 5.004, AUTOLOAD functions were looked up as methods (using
- the @ISA hierarchy), even when the function to be autoloaded was called
- as a plain function (e.g. Foo::bar()), not a method (e.g. Foo->bar() or
- $obj->bar()).
-
- Perl 5.005 will use method lookup only for methods' AUTOLOADs. However,
- there is a significant base of existing code that may be using the old
- behavior. So, as an interim step, Perl 5.004 issues an optional warning
- when a non-method uses an inherited AUTOLOAD.
-
- The simple rule is: Inheritance will not work when autoloading non-
- methods. The simple fix for old code is: In any module that used to
- depend on inheriting AUTOLOAD for non-methods from a base class named
- BaseClass, execute *AUTOLOAD = \&BaseClass::AUTOLOAD during startup.
-
- PPPPrrrreeeevvvviiiioooouuuussssllllyyyy ddddeeeepppprrrreeeeccccaaaatttteeeedddd %%%%OOOOVVVVEEEERRRRLLLLOOOOAAAADDDD is no longer usable
-
- Using %OVERLOAD to define overloading was deprecated in 5.003.
- Overloading is now defined using the overload pragma. %OVERLOAD is still
- used internally but should not be used by Perl scripts. See the _o_v_e_r_l_o_a_d
- manpage for more details.
-
- SSSSuuuubbbbrrrroooouuuuttttiiiinnnneeee aaaarrrrgggguuuummmmeeeennnnttttssss ccccrrrreeeeaaaatttteeeedddd oooonnnnllllyyyy wwwwhhhheeeennnn tttthhhheeeeyyyy''''rrrreeee mmmmooooddddiiiiffffiiiieeeedddd
-
- In Perl 5.004, nonexistent array and hash elements used as subroutine
- parameters are brought into existence only if they are actually assigned
- to (via @_).
-
- Earlier versions of Perl vary in their handling of such arguments. Perl
- versions 5.002 and 5.003 always brought them into existence. Perl
- versions 5.000 and 5.001 brought them into existence only if they were
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- not the first argument (which was almost certainly a bug). Earlier
- versions of Perl never brought them into existence.
-
- For example, given this code:
-
- undef @a; undef %a;
- sub show { print $_[0] };
- sub change { $_[0]++ };
- show($a[2]);
- change($a{b});
-
- After this code executes in Perl 5.004, $a{b} exists but $a[2] does not.
- In Perl 5.002 and 5.003, both $a{b} and $a[2] would have existed (but
- $a[2]'s value would have been undefined).
-
- GGGGrrrroooouuuupppp vvvveeeeccccttttoooorrrr cccchhhhaaaannnnggggeeeeaaaabbbblllleeee wwwwiiiitttthhhh $$$$))))
-
- The $) special variable has always (well, in Perl 5, at least) reflected
- not only the current effective group, but also the group list as returned
- by the getgroups() C function (if there is one). However, until this
- release, there has not been a way to call the setgroups() C function from
- Perl.
-
- In Perl 5.004, assigning to $) is exactly symmetrical with examining it:
- The first number in its string value is used as the effective gid; if
- there are any numbers after the first one, they are passed to the
- setgroups() C function (if there is one).
-
- FFFFiiiixxxxeeeedddd ppppaaaarrrrssssiiiinnnngggg ooooffff $$$$$$$$<<<<ddddiiiiggggiiiitttt>>>>,,,, &&&&$$$$<<<<ddddiiiiggggiiiitttt>>>>,,,, eeeettttcccc....
-
- Perl versions before 5.004 misinterpreted any type marker followed by "$"
- and a digit. For example, "$$0" was incorrectly taken to mean "${$}0"
- instead of "${$0}". This bug is (mostly) fixed in Perl 5.004.
-
- However, the developers of Perl 5.004 could not fix this bug completely,
- because at least two widely-used modules depend on the old meaning of
- "$$0" in a string. So Perl 5.004 still interprets "$$<digit>" in the old
- (broken) way inside strings; but it generates this message as a warning.
- And in Perl 5.005, this special treatment will cease.
-
- FFFFiiiixxxxeeeedddd llllooooccccaaaalllliiiizzzzaaaattttiiiioooonnnn ooooffff $$$$<<<<ddddiiiiggggiiiitttt>>>>,,,, $$$$&&&&,,,, eeeettttcccc....
-
- Perl versions before 5.004 did not always properly localize the regex-
- related special variables. Perl 5.004 does localize them, as the
- documentation has always said it should. This may result in $1, $2, etc.
- no longer being set where existing programs use them.
-
- NNNNoooo rrrreeeesssseeeettttttttiiiinnnngggg ooooffff $$$$.... oooonnnn iiiimmmmpppplllliiiicccciiiitttt cccclllloooosssseeee
-
- The documentation for Perl 5.0 has always stated that $. is _n_o_t reset
- when an already-open file handle is reopened with no intervening call to
- close. Due to a bug, perl versions 5.000 through 5.003 _d_i_d reset $.
-
-
-
- PPPPaaaaggggeeee 3333
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- under that circumstance; Perl 5.004 does not.
-
- wwwwaaaannnnttttaaaarrrrrrrraaaayyyy may return undef
-
- The wantarray operator returns true if a subroutine is expected to return
- a list, and false otherwise. In Perl 5.004, wantarray can also return
- the undefined value if a subroutine's return value will not be used at
- all, which allows subroutines to avoid a time-consuming calculation of a
- return value if it isn't going to be used.
-
- eeeevvvvaaaallll EEEEXXXXPPPPRRRR determines value of EXPR in scalar context
-
- Perl (version 5) used to determine the value of EXPR inconsistently,
- sometimes incorrectly using the surrounding context for the
- determination. Now, the value of EXPR (before being parsed by eval) is
- always determined in a scalar context. Once parsed, it is executed as
- before, by providing the context that the scope surrounding the eval
- provided. This change makes the behavior Perl4 compatible, besides
- fixing bugs resulting from the inconsistent behavior. This program:
-
- @a = qw(time now is time);
- print eval @a;
- print '|', scalar eval @a;
-
- used to print something like "timenowis881399109|4", but now (and in
- perl4) prints "4|4".
-
- CCCChhhhaaaannnnggggeeeessss ttttoooo ttttaaaaiiiinnnnttttiiiinnnngggg cccchhhheeeecccckkkkssss
-
- A bug in previous versions may have failed to detect some insecure
- conditions when taint checks are turned on. (Taint checks are used in
- setuid or setgid scripts, or when explicitly turned on with the -T
- invocation option.) Although it's unlikely, this may cause a
- previously-working script to now fail -- which should be construed as a
- blessing, since that indicates a potentially-serious security hole was
- just plugged.
-
- The new restrictions when tainting include:
-
- No glob() or <*>
- These operators may spawn the C shell (csh), which cannot be made
- safe. This restriction will be lifted in a future version of Perl
- when globbing is implemented without the use of an external program.
-
- No spawning if tainted $CDPATH, $ENV, $BASH_ENV
- These environment variables may alter the behavior of spawned
- programs (especially shells) in ways that subvert security. So now
- they are treated as dangerous, in the manner of $IFS and $PATH.
-
- No spawning if tainted $TERM doesn't look like a terminal name
- Some termcap libraries do unsafe things with $TERM. However, it
- would be unnecessarily harsh to treat all $TERM values as unsafe,
-
-
-
- PPPPaaaaggggeeee 4444
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- since only shell metacharacters can cause trouble in $TERM. So a
- tainted $TERM is considered to be safe if it contains only
- alphanumerics, underscores, dashes, and colons, and unsafe if it
- contains other characters (including whitespace).
-
- NNNNeeeewwww OOOOppppccccooooddddeeee mmmmoooodddduuuulllleeee aaaannnndddd rrrreeeevvvviiiisssseeeedddd SSSSaaaaffffeeee mmmmoooodddduuuulllleeee
-
- A new Opcode module supports the creation, manipulation and application
- of opcode masks. The revised Safe module has a new API and is
- implemented using the new Opcode module. Please read the new Opcode and
- Safe documentation.
-
- EEEEmmmmbbbbeeeeddddddddiiiinnnngggg iiiimmmmpppprrrroooovvvveeeemmmmeeeennnnttttssss
-
- In older versions of Perl it was not possible to create more than one
- Perl interpreter instance inside a single process without leaking like a
- sieve and/or crashing. The bugs that caused this behavior have all been
- fixed. However, you still must take care when embedding Perl in a C
- program. See the updated perlembed manpage for tips on how to manage
- your interpreters.
-
- IIIInnnntttteeeerrrrnnnnaaaallll cccchhhhaaaannnnggggeeee:::: FFFFiiiilllleeeeHHHHaaaannnnddddlllleeee ccccllllaaaassssssss bbbbaaaasssseeeedddd oooonnnn IIIIOOOO::::::::**** ccccllllaaaasssssssseeeessss
-
- File handles are now stored internally as type IO::Handle. The
- FileHandle module is still supported for backwards compatibility, but it
- is now merely a front end to the IO::* modules -- specifically,
- IO::Handle, IO::Seekable, and IO::File. We suggest, but do not require,
- that you use the IO::* modules in new code.
-
- In harmony with this change, *GLOB{FILEHANDLE} is now just a backward-
- compatible synonym for *GLOB{IO}.
-
- IIIInnnntttteeeerrrrnnnnaaaallll cccchhhhaaaannnnggggeeee:::: PPPPeeeerrrrllllIIIIOOOO aaaabbbbssssttttrrrraaaaccccttttiiiioooonnnn iiiinnnntttteeeerrrrffffaaaacccceeee
-
- It is now possible to build Perl with AT&T's sfio IO package instead of
- stdio. See the _p_e_r_l_a_p_i_o manpage for more details, and the _I_N_S_T_A_L_L file
- for how to use it.
-
- NNNNeeeewwww aaaannnndddd cccchhhhaaaannnnggggeeeedddd ssssyyyynnnnttttaaaaxxxx
-
- $coderef->(PARAMS)
- A subroutine reference may now be suffixed with an arrow and a
- (possibly empty) parameter list. This syntax denotes a call of the
- referenced subroutine, with the given parameters (if any).
-
- This new syntax follows the pattern of $hashref->{FOO} and $aryref-
- >[$foo]: You may now write &$subref($foo) as $subref->($foo). All
- of these arrow terms may be chained; thus, &{$table->{FOO}}($bar)
- may now be written $table->{FOO}->($bar).
-
-
-
-
-
-
- PPPPaaaaggggeeee 5555
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- NNNNeeeewwww aaaannnndddd cccchhhhaaaannnnggggeeeedddd bbbbuuuuiiiillllttttiiiinnnn ccccoooonnnnssssttttaaaannnnttttssss
-
- __PACKAGE__
- The current package name at compile time, or the undefined value if
- there is no current package (due to a package; directive). Like
- __FILE__ and __LINE__, __PACKAGE__ does _n_o_t interpolate into
- strings.
-
- NNNNeeeewwww aaaannnndddd cccchhhhaaaannnnggggeeeedddd bbbbuuuuiiiillllttttiiiinnnn vvvvaaaarrrriiiiaaaabbbblllleeeessss
-
- $^E Extended error message on some platforms. (Also known as
- $EXTENDED_OS_ERROR if you use English).
-
- $^H The current set of syntax checks enabled by use strict. See the
- documentation of strict for more details. Not actually new, but
- newly documented. Because it is intended for internal use by Perl
- core components, there is no use English long name for this
- variable.
-
- $^M By default, running out of memory it is not trappable. However, if
- compiled for this, Perl may use the contents of $^M as an emergency
- pool after _d_i_e()ing with this message. Suppose that your Perl were
- compiled with -DPERL_EMERGENCY_SBRK and used Perl's malloc. Then
-
- $^M = 'a' x (1<<16);
-
- would allocate a 64K buffer for use when in emergency. See the
- _I_N_S_T_A_L_L file for information on how to enable this option. As a
- disincentive to casual use of this advanced feature, there is no use
- English long name for this variable.
-
- NNNNeeeewwww aaaannnndddd cccchhhhaaaannnnggggeeeedddd bbbbuuuuiiiillllttttiiiinnnn ffffuuuunnnnccccttttiiiioooonnnnssss
-
- delete on slices
- This now works. (e.g. delete @ENV{'PATH', 'MANPATH'})
-
- flock
- is now supported on more platforms, prefers fcntl to lockf when
- emulating, and always flushes before (un)locking.
-
- printf and sprintf
- Perl now implements these functions itself; it doesn't use the C
- library function _s_p_r_i_n_t_f() any more, except for floating-point
- numbers, and even then only known flags are allowed. As a result,
- it is now possible to know which conversions and flags will work,
- and what they will do.
-
- The new conversions in Perl's _s_p_r_i_n_t_f() are:
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 6666
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- %i a synonym for %d
- %p a pointer (the address of the Perl value, in hexadecimal)
- %n special: *stores* the number of characters output so far
- into the next variable in the parameter list
-
- The new flags that go between the % and the conversion are:
-
- # prefix octal with "0", hex with "0x"
- h interpret integer as C type "short" or "unsigned short"
- V interpret integer as Perl's standard integer type
-
- Also, where a number would appear in the flags, an asterisk ("*")
- may be used instead, in which case Perl uses the next item in the
- parameter list as the given number (that is, as the field width or
- precision). If a field width obtained through "*" is negative, it
- has the same effect as the '-' flag: left-justification.
-
- See the sprintf entry in the _p_e_r_l_f_u_n_c manpage for a complete list of
- conversion and flags.
-
- keys as an lvalue
- As an lvalue, keys allows you to increase the number of hash buckets
- allocated for the given hash. This can gain you a measure of
- efficiency if you know the hash is going to get big. (This is
- similar to pre-extending an array by assigning a larger number to
- $#array.) If you say
-
- keys %hash = 200;
-
- then %hash will have at least 200 buckets allocated for it. These
- buckets will be retained even if you do %hash = (); use undef %hash
- if you want to free the storage while %hash is still in scope. You
- can't shrink the number of buckets allocated for the hash using keys
- in this way (but you needn't worry about doing this by accident, as
- trying has no effect).
-
- my() in Control Structures
- You can now use _m_y() (with or without the parentheses) in the
- control expressions of control structures such as:
-
- while (defined(my $line = <>)) {
- $line = lc $line;
- } continue {
- print $line;
- }
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 7777
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- if ((my $answer = <STDIN>) =~ /^y(es)?$/i) {
- user_agrees();
- } elsif ($answer =~ /^n(o)?$/i) {
- user_disagrees();
- } else {
- chomp $answer;
- die "`$answer' is neither `yes' nor `no'";
- }
-
- Also, you can declare a foreach loop control variable as lexical by
- preceding it with the word "my". For example, in:
-
- foreach my $i (1, 2, 3) {
- some_function();
- }
-
- $i is a lexical variable, and the scope of $i extends to the end of
- the loop, but not beyond it.
-
- Note that you still cannot use _m_y() on global punctuation variables
- such as $_ and the like.
-
- pack() and unpack()
- A new format 'w' represents a BER compressed integer (as defined in
- ASN.1). Its format is a sequence of one or more bytes, each of
- which provides seven bits of the total value, with the most
- significant first. Bit eight of each byte is set, except for the
- last byte, in which bit eight is clear.
-
- If 'p' or 'P' are given undef as values, they now generate a NULL
- pointer.
-
- Both _p_a_c_k() and _u_n_p_a_c_k() now fail when their templates contain
- invalid types. (Invalid types used to be ignored.)
-
- sysseek()
- The new _s_y_s_s_e_e_k() operator is a variant of _s_e_e_k() that sets and gets
- the file's system read/write position, using the _l_s_e_e_k(2) system
- call. It is the only reliable way to seek before using _s_y_s_r_e_a_d() or
- _s_y_s_w_r_i_t_e(). Its return value is the new position, or the undefined
- value on failure.
-
- use VERSION
- If the first argument to use is a number, it is treated as a version
- number instead of a module name. If the version of the Perl
- interpreter is less than VERSION, then an error message is printed
- and Perl exits immediately. Because use occurs at compile time,
- this check happens immediately during the compilation process,
- unlike require VERSION, which waits until runtime for the check.
- This is often useful if you need to check the current Perl version
- before useing library modules which have changed in incompatible
- ways from older versions of Perl. (We try not to do this more than
-
-
-
- PPPPaaaaggggeeee 8888
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- we have to.)
-
- use Module VERSION LIST
- If the VERSION argument is present between Module and LIST, then the
- use will call the VERSION method in class Module with the given
- version as an argument. The default VERSION method, inherited from
- the UNIVERSAL class, croaks if the given version is larger than the
- value of the variable $Module::VERSION. (Note that there is not a
- comma after VERSION!)
-
- This version-checking mechanism is similar to the one currently used
- in the Exporter module, but it is faster and can be used with
- modules that don't use the Exporter. It is the recommended method
- for new code.
-
- prototype(FUNCTION)
- Returns the prototype of a function as a string (or undef if the
- function has no prototype). FUNCTION is a reference to or the name
- of the function whose prototype you want to retrieve. (Not actually
- new; just never documented before.)
-
- srand
- The default seed for srand, which used to be time, has been changed.
- Now it's a heady mix of difficult-to-predict system-dependent
- values, which should be sufficient for most everyday purposes.
-
- Previous to version 5.004, calling rand without first calling srand
- would yield the same sequence of random numbers on most or all
- machines. Now, when perl sees that you're calling rand and haven't
- yet called srand, it calls srand with the default seed. You should
- still call srand manually if your code might ever be run on a pre-
- 5.004 system, of course, or if you want a seed other than the
- default.
-
- $_ as Default
- Functions documented in the Camel to default to $_ now in fact do,
- and all those that do are so documented in the _p_e_r_l_f_u_n_c manpage.
-
- m//gc does not reset search position on failure
- The m//g match iteration construct has always reset its target
- string's search position (which is visible through the pos operator)
- when a match fails; as a result, the next m//g match after a failure
- starts again at the beginning of the string. With Perl 5.004, this
- reset may be disabled by adding the "c" (for "continue") modifier,
- i.e. m//gc. This feature, in conjunction with the \G zero-width
- assertion, makes it possible to chain matches together. See the
- _p_e_r_l_o_p manpage and the _p_e_r_l_r_e manpage.
-
- m//x ignores whitespace before ?*+{}
- The m//x construct has always been intended to ignore all unescaped
- whitespace. However, before Perl 5.004, whitespace had the effect
- of escaping repeat modifiers like "*" or "?"; for example, /a *b/x
-
-
-
- PPPPaaaaggggeeee 9999
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- was (mis)interpreted as /a\*b/x. This bug has been fixed in 5.004.
-
- nested sub{} closures work now
- Prior to the 5.004 release, nested anonymous functions didn't work
- right. They do now.
-
- formats work right on changing lexicals
- Just like anonymous functions that contain lexical variables that
- change (like a lexical index variable for a foreach loop), formats
- now work properly. For example, this silently failed before
- (printed only zeros), but is fine now:
-
- my $i;
- foreach $i ( 1 .. 10 ) {
- write;
- }
- format =
- my i is @#
- $i
- .
-
- However, it still fails (without a warning) if the foreach is within
- a subroutine:
-
- my $i;
- sub foo {
- foreach $i ( 1 .. 10 ) {
- write;
- }
- }
- foo;
- format =
- my i is @#
- $i
- .
-
-
- NNNNeeeewwww bbbbuuuuiiiillllttttiiiinnnn mmmmeeeetttthhhhooooddddssss
-
- The UNIVERSAL package automatically contains the following methods that
- are inherited by all other classes:
-
- isa(CLASS)
- isa returns _t_r_u_e if its object is blessed into a subclass of CLASS
-
- isa is also exportable and can be called as a sub with two
- arguments. This allows the ability to check what a reference points
- to. Example:
-
- use UNIVERSAL qw(isa);
-
-
-
-
-
- PPPPaaaaggggeeee 11110000
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- if(isa($ref, 'ARRAY')) {
- ...
- }
-
-
- can(METHOD)
- can checks to see if its object has a method called METHOD, if it
- does then a reference to the sub is returned; if it does not then
- _u_n_d_e_f is returned.
-
- VERSION( [NEED] )
- VERSION returns the version number of the class (package). If the
- NEED argument is given then it will check that the current version
- (as defined by the $VERSION variable in the given package) not less
- than NEED; it will die if this is not the case. This method is
- normally called as a class method. This method is called
- automatically by the VERSION form of use.
-
- use A 1.2 qw(some imported subs);
- # implies:
- A->VERSION(1.2);
-
-
- NNNNOOOOTTTTEEEE:::: can directly uses Perl's internal code for method lookup, and isa
- uses a very similar method and caching strategy. This may cause strange
- effects if the Perl code dynamically changes @ISA in any package.
-
- You may add other methods to the UNIVERSAL class via Perl or XS code.
- You do not need to use UNIVERSAL in order to make these methods available
- to your program. This is necessary only if you wish to have isa
- available as a plain subroutine in the current package.
-
- TTTTIIIIEEEEHHHHAAAANNNNDDDDLLLLEEEE nnnnoooowwww ssssuuuuppppppppoooorrrrtttteeeedddd
-
- See the _p_e_r_l_t_i_e manpage for other kinds of _t_i_e()s.
-
- TIEHANDLE classname, LIST
- This is the constructor for the class. That means it is expected to
- return an object of some sort. The reference can be used to hold
- some internal information.
-
- sub TIEHANDLE {
- print "<shout>\n";
- my $i;
- return bless \$i, shift;
- }
-
-
- PRINT this, LIST
- This method will be triggered every time the tied handle is printed
- to. Beyond its self reference it also expects the list that was
- passed to the print function.
-
-
-
- PPPPaaaaggggeeee 11111111
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- sub PRINT {
- $r = shift;
- $$r++;
- return print join( $, => map {uc} @_), $\;
- }
-
-
- PRINTF this, LIST
- This method will be triggered every time the tied handle is printed
- to with the printf() function. Beyond its self reference it also
- expects the format and list that was passed to the printf function.
-
- sub PRINTF {
- shift;
- my $fmt = shift;
- print sprintf($fmt, @_)."\n";
- }
-
-
- READ this LIST
- This method will be called when the handle is read from via the read
- or sysread functions.
-
- sub READ {
- $r = shift;
- my($buf,$len,$offset) = @_;
- print "READ called, \$buf=$buf, \$len=$len, \$offset=$offset";
- }
-
-
- READLINE this
- This method will be called when the handle is read from. The method
- should return undef when there is no more data.
-
- sub READLINE {
- $r = shift;
- return "PRINT called $$r times\n"
- }
-
-
- GETC this
- This method will be called when the getc function is called.
-
- sub GETC { print "Don't GETC, Get Perl"; return "a"; }
-
-
- DESTROY this
- As with the other types of ties, this method will be called when the
- tied handle is about to be destroyed. This is useful for debugging
- and possibly for cleaning up.
-
-
-
-
-
- PPPPaaaaggggeeee 11112222
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- sub DESTROY {
- print "</shout>\n";
- }
-
-
- MMMMaaaalllllllloooocccc eeeennnnhhhhaaaannnncccceeeemmmmeeeennnnttttssss
-
- If perl is compiled with the malloc included with the perl distribution
- (that is, if perl -V:d_mymalloc is 'define') then you can print memory
- statistics at runtime by running Perl thusly:
-
- env PERL_DEBUG_MSTATS=2 perl your_script_here
-
- The value of 2 means to print statistics after compilation and on exit;
- with a value of 1, the statistics are printed only on exit. (If you want
- the statistics at an arbitrary time, you'll need to install the optional
- module Devel::Peek.)
-
- Three new compilation flags are recognized by malloc.c. (They have no
- effect if perl is compiled with system _m_a_l_l_o_c().)
-
- -DPERL_EMERGENCY_SBRK
- If this macro is defined, running out of memory need not be a fatal
- error: a memory pool can allocated by assigning to the special
- variable $^M. See the section on $^_M.
-
- -DPACK_MALLOC
- Perl memory allocation is by bucket with sizes close to powers of
- two. Because of these malloc overhead may be big, especially for
- data of size exactly a power of two. If PACK_MALLOC is defined,
- perl uses a slightly different algorithm for small allocations (up
- to 64 bytes long), which makes it possible to have overhead down to
- 1 byte for allocations which are powers of two (and appear quite
- often).
-
- Expected memory savings (with 8-byte alignment in alignbytes) is
- about 20% for typical Perl usage. Expected slowdown due to
- additional malloc overhead is in fractions of a percent (hard to
- measure, because of the effect of saved memory on speed).
-
- -DTWO_POT_OPTIMIZE
- Similarly to PACK_MALLOC, this macro improves allocations of data
- with size close to a power of two; but this works for big
- allocations (starting with 16K by default). Such allocations are
- typical for big hashes and special-purpose scripts, especially image
- processing.
-
- On recent systems, the fact that perl requires 2M from system for 1M
- allocation will not affect speed of execution, since the tail of
- such a chunk is not going to be touched (and thus will not require
- real memory). However, it may result in a premature out-of-memory
- error. So if you will be manipulating very large blocks with sizes
-
-
-
- PPPPaaaaggggeeee 11113333
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- close to powers of two, it would be wise to define this macro.
-
- Expected saving of memory is 0-100% (100% in applications which
- require most memory in such 2**n chunks); expected slowdown is
- negligible.
-
- MMMMiiiisssscccceeeellllllllaaaannnneeeeoooouuuussss eeeeffffffffiiiicccciiiieeeennnnccccyyyy eeeennnnhhhhaaaannnncccceeeemmmmeeeennnnttttssss
-
- Functions that have an empty prototype and that do nothing but return a
- fixed value are now inlined (e.g. sub PI () { 3.14159 }).
-
- Each unique hash key is only allocated once, no matter how many hashes
- have an entry with that key. So even if you have 100 copies of the same
- hash, the hash keys never have to be reallocated.
-
- SSSSuuuuppppppppoooorrrrtttt ffffoooorrrr MMMMoooorrrreeee OOOOppppeeeerrrraaaattttiiiinnnngggg SSSSyyyysssstttteeeemmmmssss
- Support for the following operating systems is new in Perl 5.004.
-
- WWWWiiiinnnn33332222
-
- Perl 5.004 now includes support for building a "native" perl under
- Windows NT, using the Microsoft Visual C++ compiler (versions 2.0 and
- above) or the Borland C++ compiler (versions 5.02 and above). The
- resulting perl can be used under Windows 95 (if it is installed in the
- same directory locations as it got installed in Windows NT). This port
- includes support for perl extension building tools like the _M_a_k_e_M_a_k_e_r
- manpage and the _h_2_x_s manpage, so that many extensions available on the
- Comprehensive Perl Archive Network (CPAN) can now be readily built under
- Windows NT. See http://www.perl.com/ for more information on CPAN and
- _R_E_A_D_M_E._w_i_n_3_2 in the perl distribution for more details on how to get
- started with building this port.
-
- There is also support for building perl under the Cygwin32 environment.
- Cygwin32 is a set of GNU tools that make it possible to compile and run
- many UNIX programs under Windows NT by providing a mostly UNIX-like
- interface for compilation and execution. See _R_E_A_D_M_E._c_y_g_w_i_n_3_2 in the perl
- distribution for more details on this port and how to obtain the Cygwin32
- toolkit.
-
- PPPPllllaaaannnn 9999
-
- See _R_E_A_D_M_E._p_l_a_n_9 in the perl distribution.
-
- QQQQNNNNXXXX
-
- See _R_E_A_D_M_E._q_n_x in the perl distribution.
-
- AAAAmmmmiiiiggggaaaaOOOOSSSS
-
- See _R_E_A_D_M_E._a_m_i_g_a_o_s in the perl distribution.
-
-
-
-
-
- PPPPaaaaggggeeee 11114444
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- PPPPrrrraaaaggggmmmmaaaattttaaaa
- Six new pragmatic modules exist:
-
- use autouse MODULE => qw(sub1 sub2 sub3)
- Defers require MODULE until someone calls one of the specified
- subroutines (which must be exported by MODULE). This pragma should
- be used with caution, and only when necessary.
-
- use blib
-
- use blib 'dir'
- Looks for MakeMaker-like '_b_l_i_b' directory structure starting in _d_i_r
- (or current directory) and working back up to five levels of parent
- directories.
-
- Intended for use on command line with ----MMMM option as a way of testing
- arbitrary scripts against an uninstalled version of a package.
-
- use constant NAME => VALUE
- Provides a convenient interface for creating compile-time constants,
- See the section on _C_o_n_s_t_a_n_t _F_u_n_c_t_i_o_n_s in the _p_e_r_l_s_u_b manpage.
-
- use locale
- Tells the compiler to enable (or disable) the use of POSIX locales
- for builtin operations.
-
- When use locale is in effect, the current LC_CTYPE locale is used
- for regular expressions and case mapping; LC_COLLATE for string
- ordering; and LC_NUMERIC for numeric formating in printf and sprintf
- (but nnnnooootttt in print). LC_NUMERIC is always used in write, since
- lexical scoping of formats is problematic at best.
-
- Each use locale or no locale affects statements to the end of the
- enclosing BLOCK or, if not inside a BLOCK, to the end of the current
- file. Locales can be switched and queried with _P_O_S_I_X::_s_e_t_l_o_c_a_l_e().
-
- See the _p_e_r_l_l_o_c_a_l_e manpage for more information.
-
- use ops
- Disable unsafe opcodes, or any named opcodes, when compiling Perl
- code.
-
- use vmsish
- Enable VMS-specific language features. Currently, there are three
- VMS-specific features available: 'status', which makes $? and system
- return genuine VMS status values instead of emulating POSIX; 'exit',
- which makes exit take a genuine VMS status value instead of assuming
- that exit 1 is an error; and 'time', which makes all times relative
- to the local time zone, in the VMS tradition.
-
-
-
-
-
-
- PPPPaaaaggggeeee 11115555
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- MMMMoooodddduuuulllleeeessss
- RRRReeeeqqqquuuuiiiirrrreeeedddd UUUUppppddddaaaatttteeeessss
-
- Though Perl 5.004 is compatible with almost all modules that work with
- Perl 5.003, there are a few exceptions:
-
- Module Required Version for Perl 5.004
- ------ -------------------------------
- Filter Filter-1.12
- LWP libwww-perl-5.08
- Tk Tk400.202 (-w makes noise)
-
- Also, the majordomo mailing list program, version 1.94.1, doesn't work
- with Perl 5.004 (nor with perl 4), because it executes an invalid regular
- expression. This bug is fixed in majordomo version 1.94.2.
-
- IIIInnnnssssttttaaaallllllllaaaattttiiiioooonnnn ddddiiiirrrreeeeccccttttoooorrrriiiieeeessss
-
- The _i_n_s_t_a_l_l_p_e_r_l script now places the Perl source files for extensions in
- the architecture-specific library directory, which is where the shared
- libraries for extensions have always been. This change is intended to
- allow administrators to keep the Perl 5.004 library directory unchanged
- from a previous version, without running the risk of binary
- incompatibility between extensions' Perl source and shared libraries.
-
- MMMMoooodddduuuulllleeee iiiinnnnffffoooorrrrmmmmaaaattttiiiioooonnnn ssssuuuummmmmmmmaaaarrrryyyy
-
- Brand new modules, arranged by topic rather than strictly alphabetically:
-
- CGI.pm Web server interface ("Common Gateway Interface")
- CGI/Apache.pm Support for Apache's Perl module
- CGI/Carp.pm Log server errors with helpful context
- CGI/Fast.pm Support for FastCGI (persistent server process)
- CGI/Push.pm Support for server push
- CGI/Switch.pm Simple interface for multiple server types
-
- CPAN Interface to Comprehensive Perl Archive Network
- CPAN::FirstTime Utility for creating CPAN configuration file
- CPAN::Nox Runs CPAN while avoiding compiled extensions
-
- IO.pm Top-level interface to IO::* classes
- IO/File.pm IO::File extension Perl module
- IO/Handle.pm IO::Handle extension Perl module
- IO/Pipe.pm IO::Pipe extension Perl module
- IO/Seekable.pm IO::Seekable extension Perl module
- IO/Select.pm IO::Select extension Perl module
- IO/Socket.pm IO::Socket extension Perl module
-
- Opcode.pm Disable named opcodes when compiling Perl code
-
- ExtUtils/Embed.pm Utilities for embedding Perl in C programs
- ExtUtils/testlib.pm Fixes up @INC to use just-built extension
-
-
-
- PPPPaaaaggggeeee 11116666
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- FindBin.pm Find path of currently executing program
-
- Class/Struct.pm Declare struct-like datatypes as Perl classes
- File/stat.pm By-name interface to Perl's builtin stat
- Net/hostent.pm By-name interface to Perl's builtin gethost*
- Net/netent.pm By-name interface to Perl's builtin getnet*
- Net/protoent.pm By-name interface to Perl's builtin getproto*
- Net/servent.pm By-name interface to Perl's builtin getserv*
- Time/gmtime.pm By-name interface to Perl's builtin gmtime
- Time/localtime.pm By-name interface to Perl's builtin localtime
- Time/tm.pm Internal object for Time::{gm,local}time
- User/grent.pm By-name interface to Perl's builtin getgr*
- User/pwent.pm By-name interface to Perl's builtin getpw*
-
- Tie/RefHash.pm Base class for tied hashes with references as keys
-
- UNIVERSAL.pm Base class for *ALL* classes
-
-
- FFFFccccnnnnttttllll
-
- New constants in the existing Fcntl modules are now supported, provided
- that your operating system happens to support them:
-
- F_GETOWN F_SETOWN
- O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC
- O_EXLOCK O_SHLOCK
-
- These constants are intended for use with the Perl operators _s_y_s_o_p_e_n()
- and _f_c_n_t_l() and the basic database modules like SDBM_File. For the exact
- meaning of these and other Fcntl constants please refer to your operating
- system's documentation for _f_c_n_t_l() and _o_p_e_n().
-
- In addition, the Fcntl module now provides these constants for use with
- the Perl operator _f_l_o_c_k():
-
- LOCK_SH LOCK_EX LOCK_NB LOCK_UN
-
- These constants are defined in all environments (because where there is
- no _f_l_o_c_k() system call, Perl emulates it). However, for historical
- reasons, these constants are not exported unless they are explicitly
- requested with the ":flock" tag (e.g. use Fcntl ':flock').
-
- IIIIOOOO
-
- The IO module provides a simple mechanism to load all of the IO modules
- at one go. Currently this includes:
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 11117777
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- IO::Handle
- IO::Seekable
- IO::File
- IO::Pipe
- IO::Socket
-
- For more information on any of these modules, please see its respective
- documentation.
-
- MMMMaaaatttthhhh::::::::CCCCoooommmmpppplllleeeexxxx
-
- The Math::Complex module has been totally rewritten, and now supports
- more operations. These are overloaded:
-
- + - * / ** <=> neg ~ abs sqrt exp log sin cos atan2 "" (stringify)
-
- And these functions are now exported:
-
- pi i Re Im arg
- log10 logn ln cbrt root
- tan
- csc sec cot
- asin acos atan
- acsc asec acot
- sinh cosh tanh
- csch sech coth
- asinh acosh atanh
- acsch asech acoth
- cplx cplxe
-
-
- MMMMaaaatttthhhh::::::::TTTTrrrriiiigggg
-
- This new module provides a simpler interface to parts of Math::Complex
- for those who need trigonometric functions only for real numbers.
-
- DDDDBBBB____FFFFiiiilllleeee
-
- There have been quite a few changes made to DB_File. Here are a few of
- the highlights:
-
- +o Fixed a handful of bugs.
-
- +o By public demand, added support for the standard hash function
- _e_x_i_s_t_s().
-
- +o Made it compatible with Berkeley DB 1.86.
-
- +o Made negative subscripts work with RECNO interface.
-
-
-
-
-
-
- PPPPaaaaggggeeee 11118888
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- +o Changed the default flags from O_RDWR to O_CREAT|O_RDWR and the
- default mode from 0640 to 0666.
-
- +o Made DB_File automatically import the _o_p_e_n() constants (O_RDWR,
- O_CREAT etc.) from Fcntl, if available.
-
- +o Updated documentation.
-
- Refer to the HISTORY section in DB_File.pm for a complete list of
- changes. Everything after DB_File 1.01 has been added since 5.003.
-
- NNNNeeeetttt::::::::PPPPiiiinnnngggg
-
- Major rewrite - support added for both udp echo and real icmp pings.
-
- OOOObbbbjjjjeeeecccctttt----oooorrrriiiieeeennnntttteeeedddd oooovvvveeeerrrrrrrriiiiddddeeeessss ffffoooorrrr bbbbuuuuiiiillllttttiiiinnnn ooooppppeeeerrrraaaattttoooorrrrssss
-
- Many of the Perl builtins returning lists now have object-oriented
- overrides. These are:
-
- File::stat
- Net::hostent
- Net::netent
- Net::protoent
- Net::servent
- Time::gmtime
- Time::localtime
- User::grent
- User::pwent
-
- For example, you can now say
-
- use File::stat;
- use User::pwent;
- $his = (stat($filename)->st_uid == pwent($whoever)->pw_uid);
-
-
- UUUUttttiiiilllliiiittttyyyy CCCChhhhaaaannnnggggeeeessss
- ppppoooodddd2222hhhhttttmmmmllll
-
- Sends converted HTML to standard output
- The _p_o_d_2_h_t_m_l utility included with Perl 5.004 is entirely new. By
- default, it sends the converted HTML to its standard output, instead
- of writing it to a file like Perl 5.003's _p_o_d_2_h_t_m_l did. Use the --------
- oooouuuuttttffffiiiilllleeee====FFFFIIIILLLLEEEENNNNAAAAMMMMEEEE option to write to a file.
-
- xxxxssssuuuubbbbpppppppp
-
- void XSUBs now default to returning nothing
- Due to a documentation/implementation bug in previous versions of
- Perl, XSUBs with a return type of void have actually been returning
- one value. Usually that value was the GV for the XSUB, but
-
-
-
- PPPPaaaaggggeeee 11119999
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- sometimes it was some already freed or reused value, which would
- sometimes lead to program failure.
-
- In Perl 5.004, if an XSUB is declared as returning void, it actually
- returns no value, i.e. an empty list (though there is a backward-
- compatibility exception; see below). If your XSUB really does
- return an SV, you should give it a return type of SV *.
-
- For backward compatibility, _x_s_u_b_p_p tries to guess whether a void
- XSUB is really void or if it wants to return an SV *. It does so by
- examining the text of the XSUB: if _x_s_u_b_p_p finds what looks like an
- assignment to ST(0), it assumes that the XSUB's return type is
- really SV *.
-
- CCCC LLLLaaaannnngggguuuuaaaaggggeeee AAAAPPPPIIII CCCChhhhaaaannnnggggeeeessss
- gv_fetchmethod and perl_call_sv
- The gv_fetchmethod function finds a method for an object, just like
- in Perl 5.003. The GV it returns may be a method cache entry.
- However, in Perl 5.004, method cache entries are not visible to
- users; therefore, they can no longer be passed directly to
- perl_call_sv. Instead, you should use the GvCV macro on the GV to
- extract its CV, and pass the CV to perl_call_sv.
-
- The most likely symptom of passing the result of gv_fetchmethod to
- perl_call_sv is Perl's producing an "Undefined subroutine called"
- error on the _s_e_c_o_n_d call to a given method (since there is no cache
- on the first call).
-
- perl_eval_pv
- A new function handy for eval'ing strings of Perl code inside C
- code. This function returns the value from the eval statement,
- which can be used instead of fetching globals from the symbol table.
- See the _p_e_r_l_g_u_t_s manpage, the _p_e_r_l_e_m_b_e_d manpage and the _p_e_r_l_c_a_l_l
- manpage for details and examples.
-
- Extended API for manipulating hashes
- Internal handling of hash keys has changed. The old hashtable API
- is still fully supported, and will likely remain so. The additions
- to the API allow passing keys as SV*s, so that tied hashes can be
- given real scalars as keys rather than plain strings (nontied hashes
- still can only use strings as keys). New extensions must use the
- new hash access functions and macros if they wish to use SV* keys.
- These additions also make it feasible to manipulate HE*s (hash
- entries), which can be more efficient. See the _p_e_r_l_g_u_t_s manpage for
- details.
-
- DDDDooooccccuuuummmmeeeennnnttttaaaattttiiiioooonnnn CCCChhhhaaaannnnggggeeeessss
- Many of the base and library pods were updated. These new pods are
- included in section 1:
-
-
-
-
-
-
- PPPPaaaaggggeeee 22220000
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- the _p_e_r_l_d_e_l_t_a manpage
- This document.
-
- the _p_e_r_l_f_a_q manpage
- Frequently asked questions.
-
- the _p_e_r_l_l_o_c_a_l_e manpage
- Locale support (internationalization and localization).
-
- the _p_e_r_l_t_o_o_t manpage
- Tutorial on Perl OO programming.
-
- the _p_e_r_l_a_p_i_o manpage
- Perl internal IO abstraction interface.
-
- the _p_e_r_l_m_o_d_l_i_b manpage
- Perl module library and recommended practice for module creation.
- Extracted from the _p_e_r_l_m_o_d manpage (which is much smaller as a
- result).
-
- the _p_e_r_l_d_e_b_u_g manpage
- Although not new, this has been massively updated.
-
- the _p_e_r_l_s_e_c manpage
- Although not new, this has been massively updated.
-
- NNNNeeeewwww DDDDiiiiaaaaggggnnnnoooossssttttiiiiccccssss
- Several new conditions will trigger warnings that were silent before.
- Some only affect certain platforms. The following new warnings and
- errors outline these. These messages are classified as follows (listed
- in increasing order of desperation):
-
- (W) A warning (optional).
- (D) A deprecation (optional).
- (S) A severe warning (mandatory).
- (F) A fatal error (trappable).
- (P) An internal error you should never see (trappable).
- (X) A very fatal error (nontrappable).
- (A) An alien error message (not generated by Perl).
-
-
- "my" variable %s masks earlier declaration in same scope
- (W) A lexical variable has been redeclared in the same scope,
- effectively eliminating all access to the previous instance. This
- is almost always a typographical error. Note that the earlier
- variable will still exist until the end of the scope or until all
- closure referents to it are destroyed.
-
- %s argument is not a HASH element or slice
- (F) The argument to _d_e_l_e_t_e() must be either a hash element, such as
-
-
-
-
-
- PPPPaaaaggggeeee 22221111
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- $foo{$bar}
- $ref->[12]->{"susie"}
-
- or a hash slice, such as
-
- @foo{$bar, $baz, $xyzzy}
- @{$ref->[12]}{"susie", "queue"}
-
-
- Allocation too large: %lx
- (X) You can't allocate more than 64K on an MS-DOS machine.
-
- Allocation too large
- (F) You can't allocate more than 2^31+"small amount" bytes.
-
- Applying %s to %s will act on scalar(%s)
- (W) The pattern match (//), substitution (s///), and transliteration
- (tr///) operators work on scalar values. If you apply one of them
- to an array or a hash, it will convert the array or hash to a scalar
- value -- the length of an array, or the population info of a hash --
- and then work on that scalar value. This is probably not what you
- meant to do. See the grep entry in the _p_e_r_l_f_u_n_c manpage and the map
- entry in the _p_e_r_l_f_u_n_c manpage for alternatives.
-
- Attempt to free nonexistent shared string
- (P) Perl maintains a reference counted internal table of strings to
- optimize the storage and access of hash keys and other strings.
- This indicates someone tried to decrement the reference count of a
- string that can no longer be found in the table.
-
- Attempt to use reference as lvalue in substr
- (W) You supplied a reference as the first argument to _s_u_b_s_t_r() used
- as an lvalue, which is pretty strange. Perhaps you forgot to
- dereference it first. See the substr entry in the _p_e_r_l_f_u_n_c manpage.
-
- Bareword "%s" refers to nonexistent package
- (W) You used a qualified bareword of the form Foo::, but the
- compiler saw no other uses of that namespace before that point.
- Perhaps you need to predeclare a package?
-
- Can't redefine active sort subroutine %s
- (F) Perl optimizes the internal handling of sort subroutines and
- keeps pointers into them. You tried to redefine one such sort
- subroutine when it was currently active, which is not allowed. If
- you really want to do this, you should write sort { &func } @x
- instead of sort func @x.
-
- Can't use bareword '%s' as %s ref while "strict refs" in use
- (F) Only hard references are allowed by "strict refs". Symbolic
- references are disallowed. See the _p_e_r_l_r_e_f manpage.
-
-
-
-
-
- PPPPaaaaggggeeee 22222222
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- Cannot resolve method `%s' overloading `%s' in package `%s'
- (P) Internal error trying to resolve overloading specified by a
- method name (as opposed to a subroutine reference).
-
- Constant subroutine %s redefined
- (S) You redefined a subroutine which had previously been eligible
- for inlining. See the section on _C_o_n_s_t_a_n_t _F_u_n_c_t_i_o_n_s in the _p_e_r_l_s_u_b
- manpage for commentary and workarounds.
-
- Constant subroutine %s undefined
- (S) You undefined a subroutine which had previously been eligible
- for inlining. See the section on _C_o_n_s_t_a_n_t _F_u_n_c_t_i_o_n_s in the _p_e_r_l_s_u_b
- manpage for commentary and workarounds.
-
- Copy method did not return a reference
- (F) The method which overloads "=" is buggy. See the section on _C_o_p_y
- _C_o_n_s_t_r_u_c_t_o_r in the _o_v_e_r_l_o_a_d manpage.
-
- Died (F) You passed _d_i_e() an empty string (the equivalent of die "") or
- you called it with no args and both $@ and $_ were empty.
-
- Exiting pseudo-block via %s
- (W) You are exiting a rather special block construct (like a sort
- block or subroutine) by unconventional means, such as a goto, or a
- loop control statement. See the sort entry in the _p_e_r_l_f_u_n_c manpage.
-
- Identifier too long
- (F) Perl limits identifiers (names for variables, functions, etc.)
- to 252 characters for simple names, somewhat more for compound names
- (like $A::B). You've exceeded Perl's limits. Future versions of
- Perl are likely to eliminate these arbitrary limitations.
-
- Illegal character %s (carriage return)
- (F) A carriage return character was found in the input. This is an
- error, and not a warning, because carriage return characters can
- break multi-line strings, including here documents (e.g., print
- <<EOF;).
-
- Illegal switch in PERL5OPT: %s
- (X) The PERL5OPT environment variable may only be used to set the
- following switches: ----[[[[DDDDIIIIMMMMUUUUddddmmmmwwww]]]].
-
- Integer overflow in hex number
- (S) The literal hex number you have specified is too big for your
- architecture. On a 32-bit architecture the largest hex literal is
- 0xFFFFFFFF.
-
- Integer overflow in octal number
- (S) The literal octal number you have specified is too big for your
- architecture. On a 32-bit architecture the largest octal literal is
- 037777777777.
-
-
-
-
- PPPPaaaaggggeeee 22223333
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- internal error: glob failed
- (P) Something went wrong with the external _p_r_o_g_r_a_m(s) used for glob
- and <*.c>. This may mean that your csh (C shell) is broken. If so,
- you should change all of the csh-related variables in config.sh: If
- you have tcsh, make the variables refer to it as if it were csh
- (e.g. full_csh='/usr/bin/tcsh'); otherwise, make them all empty
- (except that d_csh should be 'undef') so that Perl will think csh is
- missing. In either case, after editing config.sh, run ./Configure
- -S and rebuild Perl.
-
- Invalid conversion in %s: "%s"
- (W) Perl does not understand the given format conversion. See the
- sprintf entry in the _p_e_r_l_f_u_n_c manpage.
-
- Invalid type in pack: '%s'
- (F) The given character is not a valid pack type. See the pack
- entry in the _p_e_r_l_f_u_n_c manpage.
-
- Invalid type in unpack: '%s'
- (F) The given character is not a valid unpack type. See the unpack
- entry in the _p_e_r_l_f_u_n_c manpage.
-
- Name "%s::%s" used only once: possible typo
- (W) Typographical errors often show up as unique variable names. If
- you had a good reason for having a unique name, then just mention it
- again somehow to suppress the message (the use vars pragma is
- provided for just this purpose).
-
- Null picture in formline
- (F) The first argument to formline must be a valid format picture
- specification. It was found to be empty, which probably means you
- supplied it an uninitialized value. See the _p_e_r_l_f_o_r_m manpage.
-
- Offset outside string
- (F) You tried to do a read/write/send/recv operation with an offset
- pointing outside the buffer. This is difficult to imagine. The
- sole exception to this is that sysread()ing past the buffer will
- extend the buffer and zero pad the new area.
-
- Out of memory!
- (X|F) The _m_a_l_l_o_c() function returned 0, indicating there was
- insufficient remaining memory (or virtual memory) to satisfy the
- request.
-
- The request was judged to be small, so the possibility to trap it
- depends on the way Perl was compiled. By default it is not
- trappable. However, if compiled for this, Perl may use the contents
- of $^M as an emergency pool after _d_i_e()ing with this message. In
- this case the error is trappable _o_n_c_e.
-
-
-
-
-
-
- PPPPaaaaggggeeee 22224444
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- Out of memory during request for %s
- (F) The _m_a_l_l_o_c() function returned 0, indicating there was
- insufficient remaining memory (or virtual memory) to satisfy the
- request. However, the request was judged large enough (compile-time
- default is 64K), so a possibility to shut down by trapping this
- error is granted.
-
- panic: frexp
- (P) The library function _f_r_e_x_p() failed, making _p_r_i_n_t_f("%f")
- impossible.
-
- Possible attempt to put comments in qw() list
- (W) _q_w() lists contain items separated by whitespace; as with
- literal strings, comment characters are not ignored, but are instead
- treated as literal data. (You may have used different delimiters
- than the parentheses shown here; braces are also frequently used.)
-
- You probably wrote something like this:
-
- @list = qw(
- a # a comment
- b # another comment
- );
-
- when you should have written this:
-
- @list = qw(
- a
- b
- );
-
- If you really want comments, build your list the old-fashioned way,
- with quotes and commas:
-
- @list = (
- 'a', # a comment
- 'b', # another comment
- );
-
-
- Possible attempt to separate words with commas
- (W) _q_w() lists contain items separated by whitespace; therefore
- commas aren't needed to separate the items. (You may have used
- different delimiters than the parentheses shown here; braces are
- also frequently used.)
-
- You probably wrote something like this:
-
- qw! a, b, c !;
-
- which puts literal commas into some of the list items. Write it
- without commas if you don't want them to appear in your data:
-
-
-
- PPPPaaaaggggeeee 22225555
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- qw! a b c !;
-
-
- Scalar value @%s{%s} better written as $%s{%s}
- (W) You've used a hash slice (indicated by @) to select a single
- element of a hash. Generally it's better to ask for a scalar value
- (indicated by $). The difference is that $foo{&bar} always behaves
- like a scalar, both when assigning to it and when evaluating its
- argument, while @foo{&bar} behaves like a list when you assign to
- it, and provides a list context to its subscript, which can do weird
- things if you're expecting only one subscript.
-
- Stub found while resolving method `%s' overloading `%s' in package `%s'
- (P) Overloading resolution over @ISA tree may be broken by importing
- stubs. Stubs should never be implicitely created, but explicit
- calls to can may break this.
-
- Too late for "----TTTT" option
- (X) The #! line (or local equivalent) in a Perl script contains the
- ----TTTT option, but Perl was not invoked with ----TTTT in its argument list.
- This is an error because, by the time Perl discovers a ----TTTT in a
- script, it's too late to properly taint everything from the
- environment. So Perl gives up.
-
- untie attempted while %d inner references still exist
- (W) A copy of the object returned from tie (or tied) was still valid
- when untie was called.
-
- Unrecognized character %s
- (F) The Perl parser has no idea what to do with the specified
- character in your Perl script (or eval). Perhaps you tried to run a
- compressed script, a binary program, or a directory as a Perl
- program.
-
- Unsupported function fork
- (F) Your version of executable does not support forking.
-
- Note that under some systems, like OS/2, there may be different
- flavors of Perl executables, some of which may support fork, some
- not. Try changing the name you call Perl by to perl_, perl__, and so
- on.
-
- Use of "$$<digit>" to mean "${$}<digit>" is deprecated
- (D) Perl versions before 5.004 misinterpreted any type marker
- followed by "$" and a digit. For example, "$$0" was incorrectly
- taken to mean "${$}0" instead of "${$0}". This bug is (mostly)
- fixed in Perl 5.004.
-
- However, the developers of Perl 5.004 could not fix this bug
- completely, because at least two widely-used modules depend on the
- old meaning of "$$0" in a string. So Perl 5.004 still interprets
- "$$<digit>" in the old (broken) way inside strings; but it generates
-
-
-
- PPPPaaaaggggeeee 22226666
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- this message as a warning. And in Perl 5.005, this special
- treatment will cease.
-
- Value of %s can be "0"; test with defined()
- (W) In a conditional expression, you used <HANDLE>, <*> (glob),
- each(), or readdir() as a boolean value. Each of these constructs
- can return a value of "0"; that would make the conditional
- expression false, which is probably not what you intended. When
- using these constructs in conditional expressions, test their values
- with the defined operator.
-
- Variable "%s" may be unavailable
- (W) An inner (nested) _a_n_o_n_y_m_o_u_s subroutine is inside a _n_a_m_e_d
- subroutine, and outside that is another subroutine; and the
- anonymous (innermost) subroutine is referencing a lexical variable
- defined in the outermost subroutine. For example:
-
- sub outermost { my $a; sub middle { sub { $a } } }
-
- If the anonymous subroutine is called or referenced (directly or
- indirectly) from the outermost subroutine, it will share the
- variable as you would expect. But if the anonymous subroutine is
- called or referenced when the outermost subroutine is not active, it
- will see the value of the shared variable as it was before and
- during the *first* call to the outermost subroutine, which is
- probably not what you want.
-
- In these circumstances, it is usually best to make the middle
- subroutine anonymous, using the sub {} syntax. Perl has specific
- support for shared variables in nested anonymous subroutines; a
- named subroutine in between interferes with this feature.
-
- Variable "%s" will not stay shared
- (W) An inner (nested) _n_a_m_e_d subroutine is referencing a lexical
- variable defined in an outer subroutine.
-
- When the inner subroutine is called, it will probably see the value
- of the outer subroutine's variable as it was before and during the
- *first* call to the outer subroutine; in this case, after the first
- call to the outer subroutine is complete, the inner and outer
- subroutines will no longer share a common value for the variable.
- In other words, the variable will no longer be shared.
-
- Furthermore, if the outer subroutine is anonymous and references a
- lexical variable outside itself, then the outer and inner
- subroutines will _n_e_v_e_r share the given variable.
-
- This problem can usually be solved by making the inner subroutine
- anonymous, using the sub {} syntax. When inner anonymous subs that
- reference variables in outer subroutines are called or referenced,
- they are automatically rebound to the current values of such
- variables.
-
-
-
- PPPPaaaaggggeeee 22227777
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- Warning: something's wrong
- (W) You passed _w_a_r_n() an empty string (the equivalent of warn "") or
- you called it with no args and $_ was empty.
-
- Ill-formed logical name |%s| in prime_env_iter
- (W) A warning peculiar to VMS. A logical name was encountered when
- preparing to iterate over %ENV which violates the syntactic rules
- governing logical names. Since it cannot be translated normally, it
- is skipped, and will not appear in %ENV. This may be a benign
- occurrence, as some software packages might directly modify logical
- name tables and introduce nonstandard names, or it may indicate that
- a logical name table has been corrupted.
-
- Got an error from DosAllocMem
- (P) An error peculiar to OS/2. Most probably you're using an
- obsolete version of Perl, and this should not happen anyway.
-
- Malformed PERLLIB_PREFIX
- (F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form
-
- prefix1;prefix2
-
- or
-
- prefix1 prefix2
-
- with nonempty prefix1 and prefix2. If prefix1 is indeed a prefix of
- a builtin library search path, prefix2 is substituted. The error
- may appear if components are not found, or are too long. See
- "PERLLIB_PREFIX" in _R_E_A_D_M_E._o_s_2.
-
- PERL_SH_DIR too long
- (F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find
- the sh-shell in. See "PERL_SH_DIR" in _R_E_A_D_M_E._o_s_2.
-
- Process terminated by SIG%s
- (W) This is a standard message issued by OS/2 applications, while
- *nix applications die in silence. It is considered a feature of the
- OS/2 port. One can easily disable this by appropriate sighandlers,
- see the section on _S_i_g_n_a_l_s in the _p_e_r_l_i_p_c manpage. See also
- "Process terminated by SIGTERM/SIGINT" in _R_E_A_D_M_E._o_s_2.
-
- BBBBUUUUGGGGSSSS
- If you find what you think is a bug, you might check the headers of
- recently posted articles in the comp.lang.perl.misc newsgroup. There may
- also be information at http://www.perl.com/perl/, the Perl Home Page.
-
- If you believe you have an unreported bug, please run the ppppeeeerrrrllllbbbbuuuugggg program
- included with your release. Make sure you trim your bug down to a tiny
- but sufficient test case. Your bug report, along with the output of perl
- -V, will be sent off to <_p_e_r_l_b_u_g@_p_e_r_l._c_o_m> to be analysed by the Perl
- porting team.
-
-
-
- PPPPaaaaggggeeee 22228888
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- The _C_h_a_n_g_e_s file for exhaustive details on what changed.
-
- The _I_N_S_T_A_L_L file for how to build Perl. This file has been significantly
- updated for 5.004, so even veteran users should look through it.
-
- The _R_E_A_D_M_E file for general stuff.
-
- The _C_o_p_y_i_n_g file for copyright information.
-
- HHHHIIIISSSSTTTTOOOORRRRYYYY
- Constructed by Tom Christiansen, grabbing material with permission from
- innumerable contributors, with kibitzing by more than a few Perl porters.
-
- Last update: Wed May 14 11:14:09 EDT 1997
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 22229999
-
-
-
-
-
-
- PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111)))) PPPPEEEERRRRLLLLDDDDEEEELLLLTTTTAAAA((((1111))))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 33330000
-
-
-
-
-
-
-